﻿using System;

// 定义一个形状接口
public interface IShape
{
    double CalculateArea();  // 计算面积
    bool IsValid();  // 判断形状是否合法
}

// 定义一个抽象形状类
public abstract class Shape : IShape
{
    public abstract double CalculateArea();  // 计算面积

    public abstract bool IsValid();  // 判断形状是否合法
}

// 长方形类
public class Rectangle : Shape
{
    public double Length { get; set; }  // 长方形的长度
    public double Width { get; set; }  // 长方形的宽度

    public override double CalculateArea()
    {
        return Length * Width;
    }

    public override bool IsValid()
    {
        return Length > 0 && Width > 0;
    }
}

// 正方形类
public class Square : Shape
{
    public double Side { get; set; }  // 正方形的边长

    public override double CalculateArea()
    {
        return Side * Side;
    }

    public override bool IsValid()
    {
        return Side > 0;
    }
}

// 三角形类
public class Triangle : Shape
{
    public double SideA { get; set; }  // 三角形的边长A
    public double SideB { get; set; }  // 三角形的边长B
    public double SideC { get; set; }  // 三角形的边长C

    public override double CalculateArea()
    {
        // 使用海伦公式计算三角形的面积
        double p = (SideA + SideB + SideC) / 2;
        return Math.Sqrt(p * (p - SideA) * (p - SideB) * (p - SideC));
    }

    public override bool IsValid()
    {
        // 三角形的任意两边之和大于第三边才是合法的
        return SideA + SideB > SideC && SideA + SideC > SideB && SideB + SideC > SideA;
    }
}

class homework_2_2
{
    static void Main(string[] args)
    {
        Rectangle rectangle = new Rectangle { Length = 5, Width = 3 };
        if (rectangle.IsValid())
        {
            double area = rectangle.CalculateArea();
            Console.WriteLine("长方形的面积：" + area);
        }
        else
        {
            Console.WriteLine("长方形不合法");
        }

        Square square = new Square { Side = 4 };
        if (square.IsValid())
        {
            double area = square.CalculateArea();
            Console.WriteLine("正方形的面积：" + area);
        }
        else
        {
            Console.WriteLine("正方形不合法");
        }

        Triangle triangle = new Triangle { SideA = 3, SideB = 4, SideC = 5 };
        if (triangle.IsValid())
        {
            double area = triangle.CalculateArea();
            Console.WriteLine("三角形的面积：" + area);
        }
        else
        {
            Console.WriteLine("三角形不合法");
        }
    }
}
